/**
 * @FileName GamePlayH.java
 * @Package com.designMode.dynamicProxy
 * -------------------------------------
 * @function Please write description of function
 * @Date 2015-12-29 下午5:23:01
 * -------------------------------------
 * Copyright (c) 2015,顾博君 All Rights Reserved.
 */
package com.designMode.proxy.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author 顾博君
 * @ClassName DynamicProxy
 * @Date 2015-12-29 下午5:23:01
 * @Function 动态代理类 借助java自带的代理方法
 */
public class DynamicProxy implements InvocationHandler {
    /**
     * 被代理者的实例
     */
    private Object obj = null;

    /**
     * 我要代理谁
     *
     * @param _obj 被代理者
     */
    public DynamicProxy(Object _obj) {
        this.obj = _obj;
    }

    /**
     * 执行代理
     *
     * @return 代理类
     */
    public Object proxy() {
        if (obj != null) {
            Class<?> cls = obj.getClass();
            return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), this);
        }
        throw new RuntimeException("被代理者为空");
    }

    /**
     * 调用被代理的方法
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object result = method.invoke(this.obj, args);
        if (method.getName().equalsIgnoreCase("login")) {
            System.out.println("有人登录");
        } else if (method.getName().equalsIgnoreCase("upgrade")) {
            System.out.println("有人升级了");
        }
        return result;
    }
}